# Vector_set命令
# VADD
# 语法
VADD key [REDUCE dim] (FP32 | VALUES num) vector element [CAS] [NOQUANT | Q8 | BIN]
[EF build-exploration-factor] [SETATTR attributes] [M numlinks]
# 描述
向由键指定的向量集中添加一个新元素。向量数据可以以 32位浮点数的二进制数据块形式提供,也可以以字符串形式的浮点数提供
# 参数
- key
用于存储向量集数据的键的名称
- FP32 vector or VALUES num vector
可以是 32位浮点数(FP32)的二进制数据块,也可以是 num 个以字符串形式表示的浮点数。使用 FP32 格式时,数据块必须采用小端序编码。如果在不同字节序的平台上,应手动调整字节顺序,或者改用 VALUES 语法
- element
是要添加到向量集中的元素的名称
- CAS
该操作会部分使用多线程执行,采用的是检查并设置的模式。其中耗时较长的邻居候选集收集工作会在后台进行,而命令的执行则在主线程中完成
- NOQUANT
在对指定key的首次 VADD 调用中,NOQUANT 参数会强制创建不使用 int8 量化的向量;如果不加该参数,系统默认会进行 int8 量化
- BIN
强制向量使用二进制量化而不是 int8 量化。这种方式速度更快且占用内存更少,但会影响召回质量
- Q8
强制向量使用有符号 8位量化。这是系统的默认设置,提供这个选项仅仅是为了确保在插入数据时,能够校验该向量集是否使用了相同的格式
- EF build-exploration-factor
该参数在将新节点连接到现有的分层可导航小世界(HNSW)图时,对于寻找优质候选节点起着关键作用。其默认值为 200。使用更大的值可能有助于获得更好的召回率。此外,在执行 VSIM(向量相似度)搜索时,也可以通过增大 EF 参数来进一步提升召回率
- SETATTR attributes
以 JavaScript 对象的形式,将属性关联到新创建的条目上,或者更新已有的属性。其效果与单独调用 VSETATTR 命令相同
# VCARD
# 语法
VCARD key
# 描述
返回指定向量集中的元素数量
# 参数
- key
用于存储向量集数据的键的名称
# VDIM
# 语法
VDIM key
# 描述
返回指定向量集中向量的维度数
# 参数
- key
用于存储向量集数据的键的名称
# VEMB
# 语法
VEMB key element [RAW]
# 描述
返回向量集中与指定元素关联的近似向量
# 参数
- key
用于存储向量集数据的键的名称
- element
是要添加到向量集中的元素的名称
- RAW
返回原始的向量数据、量化类型,以及诸如范数和范围等元数据
# 示例
VEMB word_embeddings SQL
1) "0.18208661675453186"
2) "0.08535309880971909"
3) "0.1365649551153183"
4) "-0.16501599550247192"
5) "0.14225517213344574"
... 295 more elements ...
VEMB word_embeddings apple RAW
1) int8
2) "\xf1\xdc\xfd\x1e\xcc%E...\xde\x1f\xfbN" # artificially shortened for this example
3) "3.1426539421081543"
4) "0.17898885905742645"
# VGETATTR
# 语法
VGETATTR key element
# 描述
返回向量集中与某个元素关联的 JSON 属性
# 参数
- key
用于存储向量集数据的键的名称
- element
想要检索其属性的那个元素的名称
# VINFO
# 语法
VINFO key
# 描述
返回关于向量集的元数据和内部详情,包括大小(元素数量)、维度、量化类型以及图结构
# 参数
- key
用于存储向量集数据的键的名称
# 示例
VINFO word_embeddings
1) quant-type
2) int8
3) vector-dim
4) (integer) 300
5) size
6) (integer) 3000000
7) max-level
8) (integer) 12
9) vset-uid
10) (integer) 1
11) hnsw-max-node-uid
12) (integer) 3000000
# VISMEMBER
# 语法
VISMEMBER key element
# 描述
检查某个元素是否存在于向量集中
# 参数
- key
用于存储向量集数据的键的名称
- element
想要检索其属性的那个元素的名称
# VLINKS
# 语法
VLINKS key element [WITHSCORES]
# 描述
返回向量集中指定元素的邻居节点。该命令会展示 HNSW 图每一层中的连接关系
# 参数
- key
用于存储向量集数据的键的名称
- element
想要检索其属性的那个元素的名称
- WITHSCORES
包含每个邻居节点的相似度分数
# VRANDMEMBER
# 语法
VRANDMEMBER key [count]
# 描述
从向量集中随机获取一个或多个元素
# 参数
- count
指定要返回的元素数量。正数值表示返回不重复的元素;负数值则允许返回重复元素
- key
用于存储向量集数据的键的名称
# 示例
> VRANDMEMBER
<!-- TODO: 填写示例输出 -->
# VRANGE
# 语法
VRANGE key start end [count]
# 描述
VRANGE 命令为向量集内的元素提供了一个无状态迭代器。它允许你在每次调用时以较小的批次检索向量集中的所有元素,且无需显式的游标
# 参数
- key
用于存储向量集数据的键的名称
start
字典序范围的起始点。它可以是:
- 以 [ 为前缀的字符串,表示闭区间
- 以 ( 为前缀的字符串,表示开区间(不包含该值,例如 (a7)
- 使用特殊符号 - 来表示最小元素
end
字典序范围的结束点。它可以是:
- 以 [ 为前缀的字符串,表示闭区间
- 以 ( 为前缀的字符串,表示开区间
- 使用特殊符号 + 来表示最大元素
count
指定要返回的元素数量。正数值表示返回不重复的元素;负数值则允许返回重复元素
# 示例
VRANGE word_embeddings [Redis + 10
VRANGE mykey - + 10
VRANGE mykey (a7 + 10
VRANGE mykey - + -1
# VREM
# 语法
VREM key element
# 描述
从向量集中移除一个元素
# 参数
- key
用于存储向量集数据的键的名称
- element
想要检索其属性的那个元素的名称
# 示例
VADD vset VALUES 3 1 0 1 bar
(integer) 1
VREM vset bar
(integer) 1
VREM vset bar
(integer) 0
# VSETATTR
# 语法
VSETATTR key element "{ JSON obj }"
# 描述
将 JSON 对象与向量集中的元素进行关联。请使用此命令来存储属性,以便在 VSIM 中进行带过滤条件的相似度搜索
# 参数
- key
用于存储向量集数据的键的名称
- element
想要检索其属性的那个元素的名称
- JSON
必须是有效的 JSON 字符串。如果要删除这些属性,请使用空字符串("")
# 示例
VSETATTR key element "{\"type\": \"fruit\", \"color\": \"red\"}"
VSETATTR key element ""
# VSIM
# 语法
VSIM key (ELE | FP32 | VALUES num) (vector | element) [WITHSCORES] [WITHATTRIBS] [COUNT num]
[EPSILON delta] [EF search-exploration-factor] [FILTER expression] [FILTER-EF max-filtering-effort]
[TRUTH] [NOTHREAD]```
#### 描述
返回与给定向量或元素相似的元素。使用此命令可在向量集中执行近似或精确相似度搜索
#### 参数
- **key**
用于存储向量集数据的键的名称
- **element**
想要检索其属性的那个元素的名称
- **ELE | FP32 | VALUES num**
用于指定输入向量的提供方式。可使用 ELE 来引用一个已有的元素;使用 FP32 表示二进制浮点格式;或使用 VALUES num 来表示由浮点数值字符串组成的列表
- **WITHSCORES**
包含每个邻居节点的相似度分数
- **COUNT num**
将返回的结果数量限制为 num
- **EPSILON delta**
这是一个介于 0 到 1 之间的浮点数,用于检索与目标向量距离不超过指定 delta 值的元素。
在向量集合中,返回的元素会带有一个相似度分数(与查询向量相比),该分数在 0 到 1 之间:1 表示完全相同,0 表示完全相反(或毫无关联)。
举个例子,如果将 EPSILON 选项的值设为 0.2,就意味着只有相似度达到 0.8 及以上(即距离小于 0.2)的元素才会被返回。
这个参数非常实用:当你设置了一个较大的 COUNT(返回数量),但又不想返回那些与查询向量相差太远的结果时,就可以用它来做兜底过滤
- **EF search-exploration-factor**
用于控制搜索时的计算开销(或搜索力度)。该值越高,算法探索的节点就越多,从而提升召回率,但代价是搜索速度会变慢。通常的取值范围在 50 到 1000 之间
- **FILTER expression**
应用一个过滤表达式来限制匹配的元素
- **FILTER-EF max-filtering-effort**
限制对过滤表达式的尝试匹配次数
- **TRUTH**
强制对所有元素进行精确的线性扫描,并绕过 HNSW 图索引。通常用于基准测试(benchmarking)或计算召回率(recall)。该操作的速度会显著变慢,时间复杂度为 O(N)
- **NOTHREAD**
在主线程中执行搜索。适用于小规模向量集或基准测试。请注意,执行期间这可能会导致服务器阻塞
#### 示例
```bash
VSIM word_embeddings ELE apple
1) "apple"
2) "apples"
3) "pear"
4) "fruit"
5) "berry"
6) "pears"
7) "strawberry"
8) "peach"
9) "potato"
10) "grape"
VSIM word_embeddings ELE apple WITHSCORES WITHATTRIBS COUNT 3
1) "apple"
2) "0.9998867657923256"
3) "{\"len\": 5}"
4) "apples"
5) "0.859852746129036"
6) "{\"len\": 6}"
7) "pear"
8) "0.8226882070302963"
9) "{\"len\": 4}"
← Search命令 Connection命令 →